import 'dart:convert';

class utilJson {
  /// 将 JSON 字符串转 Map<String, dynamic>
  static Map<String, dynamic> strToMap(String jsonStr) {
    return json.decode(jsonStr);
  }

  /// Map<String, dynamic> 转 JSON 字符串
  static String mapToStr(Map<String, dynamic> map) {
    return json.encode(map);
  }

  /// 将 JSON 字符串转 List<dynamic>
  static List<dynamic> strToList(String jsonStr) {
    return json.decode(jsonStr);
  }

  /// List<dynamic> 转 JSON 字符串
  static String listToStr(List<dynamic> list) {
    return json.encode(list);
  }

  /// 实体类转 JSON 字符串（需对象实现 toJson）
  static String objectToStr(Object obj) {
    return json.encode(obj);
  }

  /// 实体类转 Map（需对象实现 toJson）
  static Map<String, dynamic> objectToMap(Object obj) {
    return json.decode(json.encode(obj));
  }

  /// Map 转实体类（T 需实现 fromJson）
  static T mapToObject<T>(Map<String, dynamic> map, T Function(Map<String, dynamic>) fromJson) {
    return fromJson(map);
  }

  /// JSON 字符串转实体类（T 需实现 fromJson）
  static T strToObject<T>(String jsonStr, T Function(Map<String, dynamic>) fromJson) {
    final map = json.decode(jsonStr);
    return fromJson(map);
  }

  /// JSON 字符串转 List<T>（T 需实现 fromJson）
  static List<T> strToListObject<T>(String jsonStr, T Function(Map<String, dynamic>) fromJson) {
    final List<dynamic> list = json.decode(jsonStr);
    return list.map((e) => fromJson(e)).toList();
  }

  /// List<T> 转 JSON 字符串（T 需实现 toJson）
  static String listObjectToStr<T>(List<T> list) {
    final List<Map<String, dynamic>> jsonList = list
        .map<Map<String, dynamic>>((e) => json.decode(json.encode(e)) as Map<String, dynamic>)
        .toList();
    // final List<Map<String, dynamic>> jsonList = list.map((e) => json.decode(json.encode(e))).toList();
    return json.encode(jsonList);
  }

  /// Map → 实体类（泛型）
  static T mapToEntity<T>(Map<String, dynamic> map, T Function(Map<String, dynamic>) fromJson) {
    return fromJson(map);
  }
}
